package com.wgh.product.mapper;

import com.wgh.product.entity.shop.Sku;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * SKU Mapper接口
 * 
 * @author AI Shop
 */
@Mapper
public interface SkuMapper extends BaseMapper<Sku> {

    /**
     * 根据商品ID查询SKU列表
     * 
     * @param productId 商品ID
     * @return SKU列表
     */
    List<Sku> selectByProductId(@Param("productId") Long productId);

    /**
     * 根据SKU编号查询SKU
     * 
     * @param skuCode SKU编号
     * @return SKU信息
     */
    Sku selectBySkuCode(@Param("skuCode") String skuCode);

    /**
     * 批量更新SKU库存
     * 
     * @param skuIds SKU ID列表
     * @param stock 库存数量
     * @return 影响行数
     */
    int updateStockBatch(@Param("skuIds") List<Long> skuIds, @Param("stock") Integer stock);

    /**
     * 批量更新SKU价格
     * 
     * @param skuIds SKU ID列表
     * @param salePrice 销售价格
     * @return 影响行数
     */
    int updatePriceBatch(@Param("skuIds") List<Long> skuIds, @Param("salePrice") java.math.BigDecimal salePrice);

    /**
     * 批量更新SKU状态
     * 
     * @param skuIds SKU ID列表
     * @param status 状态
     * @return 影响行数
     */
    int updateStatusBatch(@Param("skuIds") List<Long> skuIds, @Param("status") Integer status);

    /**
     * 扣减SKU库存
     * 
     * @param id SKU ID
     * @param quantity 扣减数量
     * @return 影响行数
     */
    int deductStock(@Param("id") Long id, @Param("quantity") Integer quantity);

    /**
     * 增加SKU库存
     * 
     * @param id SKU ID
     * @param quantity 增加数量
     * @return 影响行数
     */
    int addStock(@Param("id") Long id, @Param("quantity") Integer quantity);

    /**
     * 查询SKU详情，包含属性信息
     * 
     * @param id SKU ID
     * @return SKU详情
     */
    Sku selectSkuDetailById(@Param("id") Long id);

    /**
     * 根据商品ID列表查询SKU列表
     * 
     * @param productIds 商品ID列表
     * @return SKU列表
     */
    List<Sku> selectByProductIds(@Param("productIds") List<Long> productIds);
}